package net.sh.dpinfrastructure.config;

import java.util.List;
import java.util.Set;


/**
 * 
 * @author Lancer
 * @date 2015年8月2日下午9:08:20 配置文件操作类
 *
 */
public interface DPConfig {

    /**
     * 是否包含指定key的配置项
     * Lancer
     * 2016年4月23日上午11:35:47
     * @param key
     * @return
     *
     */
    boolean containsKey(String key);

    /**
     * 
     * Lancer 2015年8月2日下午9:13:07
     * 
     * @param key 参数名
     * @return 参数值
     *
     */
    String get(String key);
    
    /**
     * 
     * 获取配置项
     *
     * @param key 键值
     * @param defaultValue 默认值
     * @return
     * 
     * @author shaohui
     * @date 2015年9月9日 下午2:24:13
     */
    String get(String key, String defaultValue);
    
    /**
     * 
     * 获取所有配置项的key
     *
     * @return
     * 
     * @author shaohui
     * @date 2016年4月22日 下午4:44:07
     */
    Set<String> getAllKeys();
    
    /**
     * 
     * 获取布尔型配置项，可能为空
     *
     * @param key
     * @return
     * 
     * @author shaohui
     * @date 2016年8月2日 下午5:18:09
     */
    Boolean getBool(String key);
    
    /**
     * 
     * 获取布尔型配置项，为空抛出异常
     *
     * @param key key
     * @return
     * @throws NullPointerException 当配置项为空时抛出
     * 
     * @author shaohui
     * @date 2016年8月2日 下午5:12:16
     */
    boolean getBoolValue(String key) throws NullPointerException;
    
    /**
     * 
     * 获取布尔型配置项，为空返回默认值
     *
     * @param key
     * @param defaultValue
     * @return
     * 
     * @author shaohui
     * @date 2016年8月2日 下午5:18:09
     */
    boolean getBoolValue(String key, boolean defaultValue);
    
    /**
     * 
     * 获取int型配置项，可能为空
     *
     * @param key
     * @return
     * 
     * @author shaohui
     * @date 2016年8月2日 下午5:15:45
     */
    Integer getInt(String key);
    
    /**
     * 
     * 获取int型配置项，为空抛出异常
     *
     * @param key
     * @return
     * @throws NullPointerException 当配置项为空时抛出
     * 
     * @author shaohui
     * @date 2016年8月2日 下午5:11:38
     */
    int getIntValue(String key);
    
    /**
     * 
     * 获取int型配置项，为空则使用默认值
     *
     * @param key key
     * @param defaultValue 默认值
     * @return
     * 
     * @author shaohui
     * @date 2016年8月2日 下午5:12:16
     */
    int getIntValue(String key, int defaultValue);
    
    /**
     * 
     * 获取Long型配置项，可能为空
     *
     * @param key
     * @return
     * 
     * @author shaohui
     * @date 2016年8月2日 下午5:09:42
     */
    Long getLong(String key);
    
    /**
     * 
     * 获取long型配置项，为空抛出异常
     *
     * @param key
     * @return
     * @throws NullPointerException 当配置项为空时抛出
     * 
     * @author shaohui
     * @date 2016年8月2日 下午5:11:38
     */
    long getLongValue (String key) throws NullPointerException ;
    
    /**
     * 
     * 获取int型配置项，为空则使用默认值
     *
     * @param key key
     * @param defaultValue 默认值
     * @return
     * 
     * @author shaohui
     * @date 2016年8月2日 下午5:12:16
     */
    long getLongValue(String key, long defaultValue);
    
    /**
     * 
     * 获取集合
     *
     * @param key
     * @param separator 分隔符
     * @return
     * 
     * @author shaohui
     * @date 2016年8月2日 下午5:19:42
     */
    List<String> getList(String key, String separator);

}
